﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Entity;
using Business;

namespace CPEBookWeb
{
    public partial class Apercu : System.Web.UI.Page
    {
        /// <summary>
        /// L'utilisateur loggé.
        /// </summary>
        private Utilisateur utilisateur;

        /// <summary>
        /// L'utilisateur à afficher
        /// </summary>
        private Utilisateur profil;


        /// <summary>
        /// Appelée au chargement de la page.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            // On vérifie qu'un utilisateur est loggé
            utilisateur = (Utilisateur)Session["Utilisateur"];
            if (utilisateur == null)
            {
                Response.Redirect("Default.aspx");
            }

            // On vérifie qu'un identifiant correct est passé en argument
            int id = -1;
            String idGet = Request.Params.Get("id");
            if (idGet == null || !Int32.TryParse(idGet, out id))
            {
                Response.Redirect("Mur.aspx");
            }

            // On regarde si l'utilisateur existe
            profil = UtilisateurService.getUtilisateur(id);
            if (profil == null)
            {
                Response.Redirect("Mur.aspx");
            }

            // Pas d'affichage partiel si l'utilisateur est sur sa propre page ou amis avec
            if (DroitsService.estAmisAvec(utilisateur, profil.idutilisateur))
            {
                Response.Redirect("Profil.aspx?id=" + profil.idutilisateur);
            }

            // On renseigne la page avec les données en session
            lienBarreProfil.NavigateUrl = "Profil.aspx?id=" + utilisateur.idutilisateur;
            lienConsulterProfil.Text = utilisateur.prenom + " " + utilisateur.nom;
            lienConsulterProfil.NavigateUrl = "Profil.aspx?id=" + utilisateur.idutilisateur;
            lienModifierProfil.NavigateUrl = "Editer.aspx";

            h1PrenomNom.Text = profil.prenom + " " + profil.nom;
            //infoAge.Text = calculerAge(profil.datenaissance).ToString();
            infoFilliere.Text = profil.filliere;
            infoPromotion.Text = profil.promotion.ToString();
            infoSexe.Text = (profil.sexe == Sexe.MASCULIN) ? "masculin" : "féminin";
            //lienEmail.Text = profil.email;
            //lienEmail.NavigateUrl = "mailto:" + profil.email;

            // On génère le bouton d'action différement s'il y a déjà eu demande ou non
            AmitieUtilisateur amitie = AmisService.getAmitie(utilisateur.idutilisateur, profil.idutilisateur);
            if (amitie != null && amitie.Amitie != null)
            {
                char etat = amitie.Amitie.etat;
                if (etat == AmitieEtat.DEMANDEUR)
                {
                    // L'utilisateur à déjà demandé la personne en amis
                    btnAction.CommandName = "";
                    btnAction.Text = "Demande d'ajout déjà envoyée à " + profil.prenom;
                    btnAction.Enabled = false;
                }
                else if (etat == AmitieEtat.RECEVEUR)
                {
                    // L'utilisateur à fait l'objet d'une demande de la personne
                    btnAction.CommandName = "accepter";
                    btnAction.Text = "Accepter la demande d'ajout de " + profil.prenom;
                }
            }
            else
            {
                // Aucune demande en cours
                btnAction.CommandName = "demander";
                btnAction.Text = "Demander " + profil.prenom + " en amis";
            }

            // On affiche les demandes d'amis
            rafraichirDemandes();
        }


        /// <summary>
        /// Methode permettant d'ajouter au panel des demandes les demandes d'amis.
        /// </summary>
        private void rafraichirDemandes()
        {
            // On récupère le panel destiné à accueillir les demandes d'amis
            Panel panel = (Panel)Page.FindControl("panelDemandes");

            // On efface tout le contenu
            panel.Controls.Clear();

            // On récupère toutes les demandes d'ajouts à afficher
            List<AmitieUtilisateur> listDemandes = AmisService.getDemandeAjout(utilisateur.idutilisateur);

            if (listDemandes != null)
            {
                // On appele le composant générateur de code
                DemandesAjoutView demandeAjoutView = new DemandesAjoutView
                {
                    Demandes = listDemandes,
                    EcouteurDecision = new EventHandler(btnAccepterOuIgnorer_Click)
                };
                Panel tableDemandes = demandeAjoutView.getTableDemandes();

                // On ajoute la table
                panel.Controls.Add(tableDemandes);
            }
        }


        /// <summary>
        /// Evenement appelé lors d'un clic sur "Ajouter" ou "Accepter".
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnAction_Click(object sender, EventArgs e)
        {
            // On récupère le bouton à la source de l'évennement
            Button btnSource = (Button)sender;

            // On traite la commande
            switch (btnSource.CommandName)
            {
                // Demander la personne en amis
                case "demander":
                    AmisService.demandeAmitie(utilisateur.idutilisateur, profil.idutilisateur);
                    Response.Redirect("Apercu.aspx?id=" + profil.idutilisateur);
                    break;

                // Accepter la demande
                case "accepter":
                    AmisService.confirmerDemande(profil.idutilisateur, utilisateur.idutilisateur);
                    Response.Redirect("Profil.aspx?id=" + profil.idutilisateur);
                    break;

                // Sinon ne rien faire
                default:
                    break;
            }

        }


        /// <summary>
        /// Evenement appelé lors d'un clic sur "Ajouter" ou "Accepter".
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnAccepterOuIgnorer_Click(object sender, EventArgs e)
        {
            // On récupère le bouton à la source de l'évennement
            Button btnSource = (Button)sender;

            // On vérifie que la commande est valide
            if (btnSource.CommandName == "accepter" || btnSource.CommandName == "ignorer")
            {
                // On récupère l'identifiant
                int iddemandeur = -1;
                if (Int32.TryParse(btnSource.CommandArgument, out iddemandeur))
                {
                    // On traite en fonction de la réponse
                    if (btnSource.CommandName == "accepter")
                    {
                        AmisService.confirmerDemande(iddemandeur, utilisateur.idutilisateur);

                        // Après ajout on va sur la page du demandeur
                        Response.Redirect("Profil.aspx?id=" + iddemandeur.ToString());
                    }
                    else
                    {
                        AmisService.ignorerDemande(iddemandeur, utilisateur.idutilisateur);
                    }

                    // On met à jour la liste des demandes
                    rafraichirDemandes();
                }
            }
        }


        /// <summary>
        /// Evenement appelé lors d'un clic sur "Rechercher".
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void rechercheBouton_Click(object sender, EventArgs e)
        {
            Response.Redirect("Recherche.aspx?r=" + rechercheInput.Text);
        }

    }
}